package cn.assumejson.springframework.beans.factory;

/**
 * BeanFactory 顶级接口
 *
 * @author Mr. Li
 * @version 1.0
 * @since 1.0 2021/11/29 23:11
 */
public interface BeanFactory {

    String FACTORY_BEAN_PREFIX = "&";

    Object getBean(String name);

    /**
     * 获取bean，返回制定类型
     *
     * @param name         beanName
     * @param requiredType bean类型
     * @param <T>          泛型
     * @return bean类型
     */
    <T> T getBean(String name, Class<T> requiredType);

    /**
     * 实现有构造入参的实例化
     *
     * @param name beanName
     * @param args 构造参数
     * @return
     * @throws BeansException
     */
    Object getBean(String name, Object... args) throws BeansException;

    /**
     * 容器中是否存在bean
     *
     * @param name beanName
     * @return boolean
     */
    boolean containsBean(String name);

    /**
     * get ClassLoader
     *
     * @return ClassLoader
     */
    ClassLoader getBeanClassLoader();

    /**
     * 获取bean 的Class 属性
     *
     * @param name
     * @return
     */
    Class<?> getType(String name);

}
